'use strict';
const db = uniCloud.database();
const dbCmd = db.command;

/**
 * 修复现有订单的缺失佣金
 * 问题：订单从 'paid' 变为 'completed' 时，没有增加 commission_pending
 * 解决：找出所有已完成但 commission_pending 未增加的订单，补充增加
 */
exports.main = async (event, context) => {
    console.log('开始修复缺失的佣金...');
    const now = Date.now();
    
    try {
        // 查找所有已完成、有推荐人、有佣金金额、但 commission_status 为 null 的订单
        // 这些订单的佣金没有被增加到 commission_pending
        const ordersToFix = await db.collection('orders').where({
            status: 'completed',
            promoter_id: dbCmd.exists(true),
            commission_amount: dbCmd.gt(0),
            commission_status: null  // 佣金状态为 null，说明没有增加过
        }).get();
        
        if (ordersToFix.data.length === 0) {
            console.log('没有需要修复的订单。任务结束。');
            return { fixedCount: 0, message: '没有需要修复的订单' };
        }
        
        console.log(`发现 ${ordersToFix.data.length} 条需要修复的订单。`);
        let fixedCount = 0;
        let errorCount = 0;
        
        for (const order of ordersToFix.data) {
            try {
                // 增加推荐人的待激活佣金
                await db.collection('users').doc(order.promoter_id).update({
                    commission_pending: dbCmd.inc(order.commission_amount)
                });
                
                // 更新订单的佣金状态
                await db.collection('orders').doc(order._id).update({
                    commission_status: 'pending'
                });
                
                fixedCount++;
                console.log(`✅ 订单 ${order._id} 的佣金已补充（${order.commission_amount} 分，推荐人: ${order.promoter_id}）`);
            } catch (err) {
                errorCount++;
                console.error(`❌ 修复订单 ${order._id} 失败:`, err.message);
            }
        }
        
        console.log(`修复完成。成功: ${fixedCount}，失败: ${errorCount}`);
        return { 
            fixedCount, 
            errorCount,
            message: `成功修复 ${fixedCount} 条订单的缺失佣金`
        };
    } catch (err) {
        console.error('修复任务失败:', err.message);
        return { 
            code: 500, 
            message: `修复失败: ${err.message}` 
        };
    }
};

